package lc.q1_50;

import java.util.Random;

/**
 * 给你一个数组 nums 和一个值 val，你需要 原地 移除所有数值等于 val 的元素，并返回移除后数组的新长度。
 *
 * 不要使用额外的数组空间，你必须仅使用 O(1) 额外空间并 原地 修改输入数组。
 *
 * 元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。
 *
 */
public class Q27 {

    public int removeElement(int[] nums, int val) {
        // 思路，一个指针移动，遇到等于val时停止，另一个指针也移动，遇到非val时将第一个指针的值标记为该值
        int j = 0;
        for (int i = 0; i < nums.length; i++) {
            final int num = nums[i];
            if (num != val) {
                nums[j] = num;
                j ++;
            }
        }
        return j;
    }

    public static void main(String[] args) {
        final Random random = new Random();
        final int length = random.nextInt(40)+10;
        System.out.println(length);
        int[] nums = new int[length];
        for (int i = 0; i < length; i++) {
            nums[i] = random.nextInt(30);
        }
        for (int num : nums) {
            System.out.print(num+"\t");
        }
        System.out.println();
        final Q27 q27 = new Q27();
        final int i = q27.removeElement(nums, nums[4]);
        for (int num : nums) {
            System.out.print(num+"\t");
        }
        System.out.println();
        System.out.println(i);
    }

}
